﻿#undef UNICODE
#undef _UNICODE
#include<stdio.h>//标准库
#include<graphics.h>//easyx库
#include<mmsystem.h>
#include<conio.h>//使用_getch()
#include<Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib") 
//宏定义

//性别：男性 1  女性 0
#define Male 1
#define Female 0//设置性别宏定义，方便用户数据录入
#define Account_number_modify 2//用户账号
#define Passwords_modify 3//用户密码
#define Nickname_modify 4//用户昵称
#define Self_introduction_modify 5//用户的自我简介
#define QQ_account_number_modify 6//用户的QQ号
#define Gender_modify 7//用户的性别

//界面尺寸
#define Width 960
#define Height 600

struct Guest//声明一个结构体用来存放用户数据
{
	int account_number[10];//用户账号
	char passwords[20];//用户密码
	char nickname[11];//用户昵称
	bool gender;//用户性别（男1，女0）
	int max_integral;//用户最高积分
	char self_introduction[100];//用户的自我简介
	int QQ_account_number[11];//用户的QQ号
};


//定义函数时适当的使用了内联函数以优化代码
//主界面相关
void start_begin();//加载开始界面（用户第一次进入主界面）
void start_process();//加载开始界面（用户第N次进入主界面，其中N>=2）
inline static void bgm();//背景音乐
void menu_mouse();//用于检测用户在菜单处的的鼠标输入信息
//登录界面相关
void log_in_interface();//加载登录界面
void log_in_input(int,Guest);//录入用户登录信息并进行比对校正
void mouse_back_log_in();//退回主菜单及进行相应操作
//注册界面相关
void regist_interface();//加载注册界面
void regist_information();//用于注册新用户的函数
void confirm_password();//注册时用于确认密码
int check_information();//用于检测用户注册时输入的信息是否正确
void mouse_back_regist();//退回主菜单及进行相应操作
//排行榜界面相关
void rank_interface();//加载排行榜界面
void display();//展示排行榜数据
void mouse_back_rank();//退回主菜单及进行相应操作
void type_check();//用于检测用户输入的英文单词（不回显）
//用户资料填写
void modify();//修改用户信息
void encryption();//对用户的信息进行加密操作
void decrypt();//对用户的信息进行解密
void avoid();//检查用户的账号是否相同，防止发生冲突
int passwords_input(Guest guest_input);//读入用户输入的密码并判断正误
//打字系统主程序
void type_interface();//加载打字界面
void drop();//单词下落
void redraw(int x, int y, LPCTSTR s);//局部重新绘制背景
void input();//捕捉用户输入并进行判断是否正确
void level_select(int i);
void CreateTextBox(int x1, int y1, int x2, int y2, wchar_t s[], int maxlen);//文本框输入

//主程序main()函数
int main()
{
	start_begin();//程序开始界面
	bgm();//播放音乐
	_getch();//暂停
	closegraph();//关闭窗口
	return 0;//返回0值
}

void start_begin()
{
	initgraph(960, 600, NOCLOSE | EW_NOMINIMIZE| EW_SHOWCONSOLE);//创建窗口（关闭最小化，关闭按钮）
	IMAGE mbgpic;//设置主背景，也就是主界面背景（main background picture）
	IMAGE mainicon_1;//设置主背景的图标1（电子科技大学的幻想乡）
	IMAGE mainicon_2;//设置主背景的图标2（电子科技大学）
	loadimage(&mbgpic, _T("主背景.jpg"), 960, 600);//设置主背景图片大小
	loadimage(&mainicon_1, _T("主背景图标1.png"), 100, 100);//设置主背景图标1大小
	loadimage(&mainicon_2, _T("主背景图标2.jpg"), 100, 100);//设置主背景图标2大小
	putimage(0, 0, &mbgpic);//输出主界面图片
	putimage(0, 0, &mainicon_1);//输出主界面图标1
	putimage(860, 0, &mainicon_2);//输出主界面图标2
	char title[] = { "尼电英文打字系统" };//声明一个字符数组设置要输出的文本
	settextstyle(90, 50, _T("布拉格之恋"));//设置标题字体及大小
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	int width_1 = textwidth(title);//获取字体的像素长度
	int height_1 = textheight(title);//获取字体的像素宽度
	outtextxy(75, 100, title);//输出文本框，用于文字定位
	HWND hWnd = GetHWnd();//获取窗口句柄
	SetWindowText(hWnd, "尼电英文打字系统");//窗口标题
	while (1)
	{
		int decision = MessageBox(hWnd, "你准备好接受尼电英文打字系统的试炼吗，现在退出还来得及！开始前记得安装必要的字体", "灵魂拷问", MB_OKCANCEL);//设置模态对话框来判断用户的选择
		if (decision == IDOK)//如果点下确认
		{
			break;//关闭该对话框并进入主程序
		}
		else if (decision == IDCANCEL)//如果点下取消
		{
			exit(0);//退出整个程序
		}
	}
	bgm();//播放音乐
	roundrect(420, 280, 540, 320, 20, 30);//登录按钮
	char log_in[] = { "登录" };//储存字符串“登录”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“登录”字体及大小
	int width_2 = textwidth(log_in);//获取字体的像素长度
	int height_2 = textheight(log_in);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_2 / 2, 280 + (320 - 280) / 2 - height_2 / 2, log_in);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(420, 350, 540, 390, 20, 30);//注册按钮
	char reg[] = { "注册" };//储存字符串“注册”
	settextstyle(35,15,_T("布拉格之恋"));//设置“注册”字体及大小
	int width_3 = textwidth(reg);//获取字体的像素长度
	int height_3 = textheight(reg);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_3 / 2, 350 + (390 - 350) / 2 - height_3 / 2, reg);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(420, 420, 540, 460, 20, 30);//排行榜按钮
	char rank[] = { "排行榜" };//储存字符串“排行榜”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“排行榜”字体及大小
	int width_4 = textwidth(rank);//获取字体的像素长度
	int height_4 = textheight(rank);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_4 / 2, 420 + (460 - 420) / 2 - height_4 / 2, rank);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char contact_information[] = { "如软件出现异常，请及时联系维护人员进行维护，QQ：1301536870" };//留下联系方式
	settextstyle(20, 15, _T("楷体"));//设置字体及大小
	outtextxy(50, 550, contact_information);//输出文本框
	setbkmode(TRANSPARENT);//使文本框背景为透明
	menu_mouse();//获取鼠标信息并响应
}

void start_process()
{
	initgraph(960, 600, NOCLOSE | EW_NOMINIMIZE | EW_SHOWCONSOLE);//创建窗口（关闭最小化，关闭按钮）
	IMAGE mbgpic;//设置主背景，也就是主界面背景（main background picture）
	IMAGE mainicon_1;//设置主背景的图标1（电子科技大学的幻想乡）
	IMAGE mainicon_2;//设置主背景的图标2（电子科技大学）
	loadimage(&mbgpic, _T("主背景.jpg"), 960, 600);//设置主背景图片大小
	loadimage(&mainicon_1, _T("主背景图标1.png"), 100, 100);//设置主背景图标1大小
	loadimage(&mainicon_2, _T("主背景图标2.jpg"), 100, 100);//设置主背景图标2大小
	putimage(0, 0, &mbgpic);//输出主界面图片
	putimage(0, 0, &mainicon_1);//输出主界面图标1
	putimage(860, 0, &mainicon_2);//输出主界面图标2
	char title[] = { "尼电英文打字系统" };//声明一个字符数组设置要输出的文本
	settextstyle(90, 50, _T("布拉格之恋"));//设置标题字体及大小
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	int width_1 = textwidth(title);//获取字体的像素长度
	int height_1 = textheight(title);//获取字体的像素宽度
	outtextxy(75, 100, title);//输出文本框，用于文字定位
	HWND hWnd = GetHWnd();//获取窗口句柄
	SetWindowText(hWnd, "尼电英文打字系统");//窗口标题
	roundrect(420, 280, 540, 320, 20, 30);//登录按钮
	char log_in[] = { "登录" };//储存字符串“登录”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“登录”字体及大小
	int width_2 = textwidth(log_in);//获取字体的像素长度
	int height_2 = textheight(log_in);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_2 / 2, 280 + (320 - 280) / 2 - height_2 / 2, log_in);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(420, 350, 540, 390, 20, 30);//注册按钮
	char reg[] = { "注册" };//储存字符串“注册”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“注册”字体及大小
	int width_3 = textwidth(reg);//获取字体的像素长度
	int height_3 = textheight(reg);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_3 / 2, 350 + (390 - 350) / 2 - height_3 / 2, reg);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(420, 420, 540, 460, 20, 30);//排行榜按钮
	char rank[] = { "排行榜" };//储存字符串“排行榜”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“排行榜”字体及大小
	int width_4 = textwidth(rank);//获取字体的像素长度
	int height_4 = textheight(rank);//获取字体的像素宽度
	outtextxy(420 + (540 - 420) / 2 - width_4 / 2, 420 + (460 - 420) / 2 - height_4 / 2, rank);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char contact_information[] = { "如软件出现异常，请及时联系维护人员进行维护，QQ：1301536870" };//留下联系方式
	settextstyle(20, 15, _T("楷体"));//设置字体及大小
	outtextxy(50, 550, contact_information);//输出文本框
	setbkmode(TRANSPARENT);//使文本框背景为透明
	bgm();//播放音乐
	menu_mouse();//获取鼠标信息并响应
}

inline static void bgm()
{
	mciSendString("open 惜别.wav alias backgroundmusic", NULL, 0, NULL);//打开音乐
	mciSendString("play backgroundmusic", NULL, 0, NULL);//播放音乐
}

void menu_mouse()
{
	ExMessage mouse;//声明鼠标信息变量
	while (1)
	{
		if (peekmessage(&mouse, EM_MOUSE))
		{
			switch (mouse.message)
			{
			case WM_LBUTTONDOWN://如果按下了鼠标左键
				if (mouse.x >= 420 && mouse.x <= 540)//鼠标点击位置在各个按钮的x轴区域范围内
				{
					if (mouse.y >= 280 && mouse.y <= 320)//鼠标点击区在“登录”按钮范围内
					{
						printf("你点击了登录按钮\n");
						log_in_interface();//显示登录界面
					}
					else if (mouse.y >= 350 && mouse.y <= 390)//鼠标点击区在“注册”按钮范围内
					{
						printf("你点击了注册按钮\n");
						regist_interface();//显示注册界面
					}
					else if (mouse.y >= 420 && mouse.y <= 460)//鼠标点击区在“排行榜”按钮范围内
					{
						printf("你点击了排行榜按钮\n");
						rank_interface();//显示排行榜界面
					}
				}
			default:
				break;
			}
		}
	}
}

void type_check()
{
	char guest_input=getch();//立即获得用户输入，不回显
}

void log_in_interface()
{
	cleardevice();//清空原有界面
	IMAGE log_in_background;//声明变量储存登录界面背景
	loadimage(&log_in_background, _T("登录界面背景.png"), 960, 600);//设置背景格式
	putimage(0, 0,&log_in_background);//显示登录界面背景
	roundrect(820, 520, 920, 560, 20, 30);//设置返回按钮
	roundrect(600, 340, 700, 380, 20, 30);//设置确认按钮
	roundrect(750, 340, 900, 380, 20, 30);//设置直接进入按钮
	char back[] = { "主界面" };//储存字符串“主界面”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“主界面”字体及大小
	int width_1 = textwidth(back);//获取字体的像素长度
	int height_1 = textheight(back);//获取字体的像素宽度
	outtextxy(820 + (920 - 820) / 2 - width_1 / 2, 520 + (560 - 520) / 2 - height_1 / 2, back);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(600, 180, 850, 220, 20, 30);//设置账号栏
	roundrect(600, 250, 850, 290, 20, 30);//设置密码栏
	char account_number[] = { "账号" };//储存字符串“账号”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(535, 185, account_number);//输出文本框
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char password[] = { "密码" };//储存字符串“密码”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(535, 255, password);//输出文本框
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char play[] = { "直接进入" };//储存字符串“直接进入”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	int width_2 = textwidth(play);//获取字体的像素长度
	int height_2 = textheight(play);//获取字体的像素宽度
	outtextxy(750 + (900 - 750) / 2 - width_2 / 2, 340 + (380 - 340) / 2 - height_2 / 2, play);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char confirm[] = { "确定" };//储存字符串“确定”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	int width_3 = textwidth(confirm);//获取字体的像素长度
	int height_3 = textheight(confirm);//获取字体的像素宽度
	outtextxy(600 + (700 - 600) / 2 - width_3 / 2, 340 + (380 - 340) / 2 - height_3 / 2, confirm);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	mouse_back_log_in();//退回主菜单
	_getch();//暂停
}

void mouse_back_log_in()
{
	ExMessage mouse;//声明鼠标变量
	Guest guest_input;
	while (1)
	{
		if (peekmessage(&mouse, EM_MOUSE))//检测鼠标变量
		{
			switch (mouse.message)//访问鼠标结构体成员
			{
			case WM_LBUTTONDOWN://如果按下了鼠标左键
				if (mouse.x >= 820 && mouse.x <= 920 && mouse.y >= 520 && mouse.y <= 560)//点击区域在主菜单按钮内
				{
					printf("你点击了主菜单按钮\n");
					start_process();//返回主菜单
				}
				else if (mouse.x >= 600 && mouse.x <= 850 && mouse.y >= 180 && mouse.y <= 220)//点击区域在账号栏
				{
					int i;
					for (i = 0; i < 10; i++)
					{
						guest_input.account_number[i] = 0;
					}
					printf("你点击了账号栏，请输入账号,输入完毕按下Enter键结束输入\n");
					
					if (scanf("%d%d%d%d%d%d%d%d%d%d", guest_input.account_number) != 10)
					{
						printf("请按规则输入！");
					}
					else
					{
						printf("输入账号成功！");
					}
				}
				else if (mouse.x >= 600 && mouse.x <= 850 && mouse.y >= 250 && mouse.y <= 290)//点击区域在密码栏
				{
					printf("你点击了密码栏，请输入密码,输入完毕按下Enter键结束输入\n");
					CreateTextBox(400, 200, 500, 300,(wchar_t*)guest_input.passwords,20 );
					passwords_input(guest_input);
				}
				else if (mouse.x >= 600 && mouse.x <= 700 && mouse.y >= 340 && mouse.y <= 380)//点击区域在确认栏
				{
					printf("你点击了确认按钮\n");
				}
				else if (mouse.x >= 750 && mouse.x <= 900 && mouse.y >= 340 && mouse.y <= 380)//点击区域在直接进入栏
				{
					printf("你点击了直接进入按钮\n");
					HWND hWnd = GetHWnd();//获取窗口句柄
					SetWindowText(hWnd, "确认操作");//窗口标题
					while (1)
					{
						int decision = MessageBox(hWnd, "你确定要直接进入吗？之后的积分数据将不会保存", "确认操作", MB_OKCANCEL);//设置模态对话框来判断用户的选择
						if (decision == IDOK)//如果点下确认
						{
							type_interface();//进入打字界面
							break;//关闭该对话框并进入主程序
						}
						else if (decision == IDCANCEL)//如果点下取消
						{
							log_in_interface();
							break;//不进行操作
						}
					}
					
				}
			default:
				break;
			}
		}
	}
}

void log_in_input(int,Guest)
{

}

void regist_interface()
{
	cleardevice();//清空原有界面
	IMAGE regist_background;//声明变量储存注册界面背景
	loadimage(&regist_background, _T("注册界面背景.png"), 960, 600);//设置背景格式
	putimage(0, 0, &regist_background);//显示注册界面背景
	roundrect(820, 520, 920, 560, 20, 30);//设置返回按钮
	char back[] = { "主界面" };//储存字符串“主界面”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“主界面”字体及大小
	int width_2 = textwidth(back);//获取字体的像素长度
	int height_2 = textheight(back);//获取字体的像素宽度
	outtextxy(820 + (920 - 820) / 2 - width_2 / 2, 520 + (560 - 520) / 2 - height_2 / 2, back);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	roundrect(355, 180, 605, 220, 20, 30);//设置账号栏
	roundrect(355, 250, 605, 290, 20, 30);//设置密码栏
	roundrect(355, 320, 605, 360, 20, 30);//设置确认密码栏
	roundrect(355, 390, 605, 420, 20, 30);//设置昵称栏
	char account_number[] = { "账号" };//储存字符串“账号”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(290, 185, account_number);//输出文本框
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char password[] = { "密码" };//储存字符串“密码”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(290, 255, password);//输出文本框
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char password_confirm[] = { "确认密码" };//储存字符串“确认密码”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(230, 325, password_confirm);//输出文本框
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	char guest_nickname[] = { "昵称" };//储存字符串“昵称”
	settextstyle(35, 15, _T("布拉格之恋"));//设置字体格式
	outtextxy(290, 395, guest_nickname);//输出文本框
	regist_information();//录入用户数据
	mouse_back_regist();//退回主菜单
	_getch();//暂停
}

void mouse_back_regist()
{
	ExMessage mouse;//声明鼠标变量
	Guest guest_information;//使用结构体储存用户数据
	while (1)
	{
		if (peekmessage(&mouse, EM_MOUSE))//检测鼠标变量
		{
			switch (mouse.message)//访问鼠标结构体成员
			{
			case WM_LBUTTONDOWN://如果按下了鼠标左键
				if (mouse.x >= 820 && mouse.x <= 920 && mouse.y >= 520 && mouse.y <= 560)//点击区域在主菜单按钮内
				{
					printf("你点击了主菜单按钮\n");
					start_process();//返回主菜单
				}
				else if (mouse.x>=355&&mouse.x<=605&&mouse.y>=180&&mouse.y<=220)//点击区域在账号栏
				{
					printf("你点击了账号栏\n");
				}
				else if (mouse.x >= 355 && mouse.x <= 605 && mouse.y >= 250 && mouse.y <= 290)//点击区域在密码栏
				{
					printf("你点击了密码栏\n");
				}
				else if (mouse.x >= 355 && mouse.x <= 605 && mouse.y >= 320 && mouse.y <= 360)//点击区域在确认密码栏
				{
					printf("你点击了确认密码栏\n");
				}
				else if (mouse.x >= 355 && mouse.x <= 605 && mouse.y >= 390 && mouse.y <= 420)//点击区域在昵称栏
				{
					printf("你点击了昵称栏\n");
				}
				default:
					break;
			}
		}
	}
}

void rank_interface()
{
	cleardevice();//清空原有界面
	IMAGE rank_background;//声明变量储存注册界面背景
	loadimage(&rank_background, _T("排行榜界面背景.jpg"), 960, 600);//设置背景格式
	putimage(0, 0, &rank_background);//显示排行榜界面背景
	roundrect(820, 520, 920, 560, 20, 30);//设置返回按钮
	char back[] = { "主界面" };//储存字符串“主界面”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“主界面”字体及大小
	int width_2 = textwidth(back);//获取字体的像素长度
	int height_2 = textheight(back);//获取字体的像素宽度
	outtextxy(820 + (920 - 820) / 2 - width_2 / 2, 520 + (560 - 520) / 2 - height_2 / 2, back);//使文字居中对正
	setbkmode(TRANSPARENT);//设置主标题背景为透明
	mouse_back_rank();//退回主菜单
	_getch();//暂停
}

void mouse_back_rank()
{
	ExMessage mouse;//声明鼠标变量
	while (1)
	{
		if (peekmessage(&mouse, EM_MOUSE))//检测鼠标变量
		{
			switch (mouse.message)//访问鼠标结构体成员
			{
			case WM_LBUTTONDOWN://如果按下了鼠标左键
				if (mouse.x >= 820 && mouse.x <= 920 && mouse.y >= 520 && mouse.y <= 560)//点击区域在主菜单按钮内
				{
					printf("你点击了主菜单按钮");
					start_process();//返回主菜单
				}
			default:
				break;
			}
		}
	}
}

void confirm_password()
{

}

int check_information()
{
	int i = 0;//若i=0则输入无误，i=-1则报错并清除所有数据
	return i;
}

void regist_information()//用户注册
{
	printf("请在控制台处输入账号（要求为10位数字，第一个数字不为0，且不带有其他字符）\n");
	int number[10];
}

void type_interface()
{
	cleardevice();//清空原有界面
	IMAGE type_background;//声明图片变量
	loadimage(&type_background, _T("打字界面背景.jpg"), 960, 600);//将图片存入变量
	putimage(0, 0, &type_background);//输出图片
	char integral[] = { "积分：" };//储存字符串“积分”
	settextstyle(35, 15, _T("布拉格之恋"));//设置“主界面”字体及大小
	outtextxy(750, 20, integral);//输出字符串
	if (kbhit() != 0)//如果有键盘输入
	{
		input();//检测键盘输入
	}
	else
	{
		drop();//单词下落
	}
}

void drop()
{
	FILE *vocabulary;
	vocabulary = fopen("词库.txt", "r");
	char words_1[12] = { "\0\0\0\0\0\0\0\0\0\0\0" };
	char words_2[12] = { "\0\0\0\0\0\0\0\0\0\0\0" };
	char words_3[12] = { "\0\0\0\0\0\0\0\0\0\0\0" };
	while (fgets(words_1, 12, vocabulary) != NULL)
	{
		fgets(words_1, 12, vocabulary);
		setbkmode(TRANSPARENT);
		int count=rand() % 10;
		int height, x = 100+50*count;
		int change = 1;
		for(height=0;height<=600;height++)
		{
			redraw(x, height, words_1);
			Sleep(10);
			redraw(x, height, NULL);
		}
	}
	fclose(vocabulary);
}

void redraw(int x,int y,LPCTSTR s)
{
	static IMAGE tmp;
	if (s == NULL)
	{
		putimage(x,y,&tmp);
	}
	else
	{
		int width = textwidth(s);
		int height = textheight(s);
		getimage(&tmp, x, y, width, height);
		outtextxy(x, y, s);
	}
}

void input()
{

}

void level_select(int i)
{
	if (i >= 1 && i <= 3)
	{
		switch (i)
		{
		case 1:
		case 2:
		case 3:
			break;
		default:
			break;
		}
	}
	else
	{
		printf("error");
	}
}

void display()//展示排行榜数据
{

}
void modify()//修改用户信息
{
	int opration;
	switch (opration)
	{
	case Account_number_modify:
		break;
	case Passwords_modify:
		break;
	case Nickname_modify:
		break;
	case Self_introduction_modify:
		break;
	case QQ_account_number_modify:
		break;
	case Gender_modify:
		break;
	default:
		break;
	}
}
void encryption()
{

}
void decrypt()
{

}
void avoid()
{

}

int passwords_input(Guest guest_input)
{
	int i;
	for(i=0;i<=20;i++)
	{
		guest_input.passwords[i] = getch();
		if (getch() == '\0')
		{
			printf("密码输入成功！");
			break;
		}
	}
	return 0;
}

// 实现文本框输入
void CreateTextBox(int x1, int y1, int x2, int y2, wchar_t s[], int maxlen)
{
	int width = textwidth(*s);	// 字符串总宽度
	int counter = 0;			// 光标闪烁计数器
	bool binput = true;			// 是否输入中

	// 备份环境值
	int oldlinecolor = getlinecolor();
	int oldbkcolor = getbkcolor();
	// 设置环境值
	setlinecolor(BLACK);
	setbkcolor(WHITE);

	// 绘制文本框
	fillrectangle(x1, y1, x2, y2);
	outtextxy(x1 + 10, y1 + 5, *s);

	ExMessage msg;
	while (binput)
	{
		while (binput && peekmessage(&msg, EM_MOUSE | EM_CHAR, false))	// 获取消息，但不从消息队列拿出
		{
			if (msg.message == WM_LBUTTONDOWN)
			{
				// 如果鼠标点击文本框外面，结束文本输入
				if (msg.x < x1 || msg.x > x2 || msg.y < y1 || msg.y > y2)
				{
					binput = false;
					break;
				}
			}
			else if (msg.message == WM_CHAR)
			{
				int len = wcslen(s);
				switch (msg.ch)
				{
				case '\b':// 用户按退格键，删掉一个字符
					if (len > 0)
					{
						s[len - 1] = 0;
						width = textwidth(*s);
						counter = 0;
						clearrectangle(x1 + 10 + width, y1 + 1, x2 - 1, y2 - 1);
					}
					break;
				case '\r':// 用户按回车键，结束文本输入
				case '\n':
					binput = false;
					break;
				default:				// 用户按其它键，接受文本输入
					if (len < maxlen - 1)
					{
						s[len++] = msg.ch;
						s[len] = 0;

						clearrectangle(x1 + 10 + width + 1, y1 + 3, x1 + 10 + width + 1, y2 - 3);	// 清除画的光标
						width = textwidth(*s);				// 重新计算文本框宽度
						counter = 0;
						outtextxy(x1 + 10, y1 + 5, *s);		// 输出新的字符串
					}
				}
			}
			peekmessage(NULL, EM_MOUSE | EM_CHAR);			// 从消息队列抛弃刚刚处理过的一个消息
		}

		// 绘制光标（光标闪烁周期为 20ms * 32）
		counter = (counter + 1) % 32;
		if (counter < 16)
			line(x1 + 10 + width + 1, y1 + 3, x1 + 10 + width + 1, y2 - 3);				// 画光标
		else
			clearrectangle(x1 + 10 + width + 1, y1 + 3, x1 + 10 + width + 1, y2 - 3);	// 擦光标

		// 延时 20ms
		Sleep(20);
	}




//后面的是程序实例，不要取消注释，这只是一个音乐播放代码
// 编译该范例前，请把 background.mp3 放在项目文件夹中
// 发布时，请把 background.mp3 和编译的 exe 放在一起
// 编译环境：VC6  VS2010--2017   EasyX 20180727(beta)

//#include <graphics.h>
//#include <conio.h>
//// 引用 Windows Multimedia API
//#pragma comment(lib,"Winmm.lib")		//这个决不能少
//
//void main()
//{
//	initgraph(640, 480);
//
//	// 打开音乐
//	mciSendString("open 惜别.wav alias mymusic", NULL, 0, NULL);
//
//	outtextxy(0, 0, "按任意键开始播放");
//	getch();
//
//	// 播放音乐
//	mciSendString("play mymusic", NULL, 0, NULL);
//
//	outtextxy(0, 0, "按任意键停止播放");
//	getch();
//
//	// 停止播放并关闭音乐
//	mciSendString("stop mymusic", NULL, 0, NULL);
//	mciSendString("close mymusic", NULL, 0, NULL);
//
//	outtextxy(0, 0, "按任意键退出程序");
//	getch();
//	closegraph();
//}